<?php 
class venda_equipeModel extends Model{
    public $tabela = "venda_equipe";
    public $pkey   = 'venda_equipe_cod';
    public $model_label       = "Equipe";
    public $model_description = 
            "As <b>Equipes de venda</b> permitirão que os <b>Integrantes</b> possam visitar clientes em potencial e convidá-los
                para os <b>Eventos</b> que estiverem relacionados";
    
    public $dados  = array(
         'venda_equipe_cod' => array(
	    'name'     => 'Código',
	    'type'     => 'int',
	    'size'     => '11',
	    'pkey'    => true,
	    'ai'      => true,
	    'grid'    => true,
	    'display' => true,
	    'private' => true
        ),
         'venda_equipe_nome' => array(
	    'name'     => 'Nome da equipe',
	    'type'     => 'varchar',
	    'size'     => '32',
	    'grid'    => true,
	    'display' => true,
        ),
         'venda_equipe_criadoem' => array(
	    'name'     => 'Criadoem',
	    'type'     => 'timestamp',
            'private' => true,
	    'notnull' => true,
	    'grid'    => true,
	    'display' => true,
        ),
        'venda_equipe_status' => array(
	    'name'     => 'Status',
	    'type'     => 'enum',
	    'default' => 'ativo',
	    'options' => array(
	    	'ativo' => 'Ativo',
	    	'excluido' => 'Excluído',
	    ),
            'private' => true,
	    'notnull' => true,
	    'grid'    => true,
	    'display' => true,
        ),
        
        'venda_equipe_eventoativo' => array(
	    'name'     => 'Evento Atual',
	    'type'    => 'int',
	    'display' => true,
            'notnull' => true,
	    'fkey'    => array(
                'cardinalidade' => '1n',
	        'model'         => 'venda/evento',
	        'keys'          => array('venda_evento_cod', 'venda_evento_titulo'),
                'sort'          => 'venda_evento_titulo ASC',
                'onupdate'      => 'cascade',
                'ondelete'      => 'restrict'
	    ),
            'description' => 'Evento atual liberado para esta equipe'
        ),
        
        'venda_equipe_proximoevento' => array(
	    'name'     => 'Próximo evento',
	    'type'    => 'int',
	    'display' => true,
	    'fkey'    => array(
                'cardinalidade' => '1n',
	        'model'         => 'venda/evento',
	        'keys'          => array('venda_evento_cod', 'venda_evento_titulo'),
                'sort'          => 'venda_evento_titulo ASC',
                'onupdate'      => 'cascade',
                'ondelete'      => 'restrict'
	    ),
            'description' => 'Evento liberado para os vendedores que atingirem a quota'
        ),
        
        'venda_equipe_integrante' => array(
	    'name'     => 'Integrantes da Equipe',
	    'type'    => 'int',
	    'display' => true,
	    'fkey'    => array(
                'cardinalidade' => 'nn',
	        'model'         => 'venda/integrante',
	        'keys'          => array('cod_usuario', 'user_name', 'user_cargo'),
                'sort'          => 'user_name ASC',
                'formmodel'     => 'venda/equipe',
                'onupdate'      => 'cascade',
                'ondelete'      => 'cascade'
	    ),
            'description' => 'Usuários do sistema que terão o papel de <b>Vendedores</b>'
        ),
        
         'venda_minhas_visitas' => array(
	    'name'     => 'Minhas Visitas',
	    'display'  => true,
            'especial' => 'hide',
	    'fkey'     => array(
                'cardinalidade' => 'n1',
	        'model'         => 'venda/visita',
	        'keys'          => array('venda_visita_cod', 'venda_visita_cod'),
                //'sort'          => 'user_name ASC',
                'onupdate'      => 'cascade',
                'ondelete'      => 'cascade'
	    ),
            'description' => 'Usuários do sistema que terão o papel de <b>Vendedores</b>'
        ),
        
        /*
        'venda_equipe_evento' => array(
            'name'      => 'Eventos desta Equipe',
            'private'   => true,
            'fkey'      => array(
                'filther'       => array("venda_equipe_status = 'ativo'"),
                'model' 	=> 'venda/evento',
                'keys'          => array('venda_evento_cod', 'venda_evento_titulo'),
                'cardinalidade' => 'n1'//nn 1n 11
            )
        ),*/

	'button'     => array('button' => 'Gravar Equipe'),);
    
    public function __construct() {
        parent::__construct();
        $this->LoadModel('usuario/login', 'uobj');
        $this->LoadModel('venda/visita', 'vis');
        $tb = $this->vis->getTable();
        $cod = $this->uobj->getCodUsuario();
        $this->dados['venda_minhas_visitas']['fkey']['filther'] = "$tb.cod_usuario = '$cod'";
    }
    
    public function hasIntegrante($equipe){
        if(!is_array($equipe)) $equipe = $this->getItem($equipe);
        if(empty($equipe)) return false;
        if(!array_key_exists('venda_equipe_integrante', $equipe)) return false;
        return (!empty($equipe['venda_equipe_integrante']));
    }
    
    public function getMenu(){
        $equipe = $this->selecionar(
            array('venda_equipe_cod', 'venda_equipe_nome'),
            "venda_equipe_status = 'ativo'"       
        );
        $this->LoadResource('html', 'html');
        $arr = array();
        $modelname = $this->getModelName();
        $link =   "$modelname/show/";
        foreach($equipe as $eq){
            $url = $link.$eq['venda_equipe_cod'];
            $add = $this->html->getActionLinkIfHasPermission("$modelname/apagar/".$eq['venda_equipe_cod'], '[x]', 'apagar_equipe');
            $arr[$eq['venda_equipe_nome'].$add] = $url;
        }

        $this->LoadJsPlugin('menu/menu', 'mt');
        $this->mt->imprime();
        $var = (!empty ($arr))?$this->mt->draw($arr):"";
        $add = $this->html->getActionLinkIfHasPermission("$modelname/formulario", '[+]');
        $equ = $this->html->getActionLinkIfHasPermission("$modelname", 'Equipes de Venda');
        EventTube::addEvent('menu-lateral', "<h3>$equ $add</h3>$var");
        
        $this->html->LoadJqueryFunction("$('.apagar_equipe').click(function(){ 
            if(!confirm('Esta equipe será enviada para a lixeira, deseja continuar?')){ return false;}
        });");
    }

    public function getAllEvents($cod_equipe){
        $out = array();
        $var = $this->selecionar(array('venda_equipe_eventoativo', 'venda_equipe_proximoevento'), "venda_equipe_cod = '$cod_equipe'");
        if(!empty($var)){
            $var = array_shift($var);
            if($var['venda_equipe_eventoativo'] != "")   $out[$var['venda_equipe_eventoativo']]   = $var['venda_equipe_eventoativo'];
            if($var['venda_equipe_proximoevento'] != "") $out[$var['venda_equipe_proximoevento']] = $var['venda_equipe_proximoevento'];
            return $out;
        }
        return $out;
    }
    
    public function getEventoAtivo($cod_equipe){
        $var = $this->selecionar(array('venda_equipe_eventoativo'), "venda_equipe_cod = '$cod_equipe'");
        if(!empty($var)){
            $var = array_shift($var);
            return $var['venda_equipe_eventoativo'];
        }
        return "";
    }
    
    public function getActiveEventOfEquipe($cod_equipe){
        $this->LoadModel('venda/equipe', 'ev');
        return $this->getEventoAtivo($cod_equipe);
    }
    
    public function getActiveEventOfUser($cod = ""){
        $cod_equipe = $this->getCodEquipeOfUser($cod);
        if($cod_equipe == "") return "";
        $this->LoadModel('venda/equipe', 'ev');
        return $this->getEventoAtivo($cod_equipe);
    }
    
    public function getEventosAtivosDaEquipe($cod_equipe){
        $var = $this->selecionar(
                array('venda_equipe_eventoativo', 'venda_equipe_proximoevento'),
                "venda_equipe_cod = '$cod_equipe'");
        if(empty($var)) return array();
        $var = array_shift($var);
        $out = array();
        if($var['venda_equipe_eventoativo'] != "")  $out[] = $var['venda_equipe_eventoativo'];
        if($var['venda_equipe_proximoevento'] != "")$out[] = $var['venda_equipe_proximoevento'];
        $query = "'".implode("', '", $out)."'";
        $this->LoadModel('venda/evento', 'ev');
        $temp = $this->ev->selecionar(
                array('venda_evento_cod'), 
                "venda_evento_cod IN ($query) AND
                 venda_evento_iniciodivulgacao <= NOW() AND
                 venda_evento_terminodivulgacao >= NOW()");
        if(empty($temp)) return array();
        $out = array();
        foreach($temp as $t) $out[] = $t['venda_evento_cod'];
        return $out;
    }
    
    public function UserHasEquipe($cod = ""){
        $equipe = $this->getEquipeByUser($cod);
        return !empty($equipe);
    }
    
    public function getCodEquipeOfUser($cod = ''){
        $equipe = $this->getEquipeByUser($cod);
        if(empty($equipe)) return "";
        $eq = array_shift($equipe);
        return $eq['venda_equipe_cod'];
    }
    
    private function getEquipeByUser($cod = ''){
        if($cod == ""){
            $this->LoadModel('usuario/login', 'uobj');
            $cod = $this->uobj->getCodUsuario();
        }
        
        $this->LoadModel('venda/integrante', 'in');
        $this->db->Join($this->tabela, $this->in->getTable());
        $equipe = $this->selecionar(array('venda_equipe_cod'), "
            cod_usuario = '$cod' AND 
            venda_equipe_status = 'ativo'
        ");
        return $equipe;
    }
    
    public function getEmpresasByEquipe($cod_equipe, $page, $link, $qtd){
        $this->LoadModel('venda/empresa', 'emp');
        return $this->emp->getByEquipe($cod_equipe, $page, $link, $qtd);
    }
    
    public function getVisitasByEquipe($cod_equipe, $page, $link, $qtd){
        $this->LoadModel('venda/visita', 'vis');
        return $this->vis->getByEquipe($cod_equipe, $page, $link, $qtd);
    }
    
    public function getVisitasByEventUser($cod_equipe, $page, $link, $qtd){
        $this->LoadModel('venda/visita', 'vis');
        return $this->vis->getByEquipe($cod_equipe, $page, $link, $qtd);
    }
    
    public function getEventosOfEquipe($equipe, $page){
        $this->LoadModel('venda/evento', 'ev');
        $this->LoadModel('venda/visita', 'vis');
        $this->db->Join($this->ev->getTable(),$this->vis->getTable(), array('venda_evento_cod'), array('venda_evento_cod'), 'LEFT');
        $dados = $this->ev->getCampos();
        $dados[0] = "DISTINCT ".$dados[0];
        return $this->ev->paginate($page, 'venda/equipe/evento', '', '', 20, $dados, "venda_equipe_cod = '$equipe'", "");
    }

    public function paginate($page, $link = "", $cod_item = "", $campo = "", $qtd = 20, $campos = array(), $adwhere = "", $order = "") {
        $order = ($order == "")?"venda_equipe_nome ASC":$order;
        return parent::paginate($page, $link, $cod_item, $campo, $qtd, $campos, $adwhere, $order);
    }
    
    public function insereMetas($cod_evento, $cod_equipe, $integrantes){
        
        $this->LoadModel('venda/meta', 'metas');
        //$evento = $this->ev->getItem($cod_evento);
        $arr['evento'] = $cod_evento;
        $arr['equipe'] = $cod_equipe; 
        $arr['meta'] = 0; 
        foreach($integrantes as $integrante){
            $arr['usuario'] = $integrante['cod_usuario'];
            $this->metas->inserir($arr);
        }
    }
    
    public function getMetas($cod_evento, $cod_equipe){
        $this->LoadModel('venda/meta', 'metas');
        return $this->metas->paginate(0, "", "", "", 10000, array(), "evento = '$cod_evento' AND equipe = '$cod_equipe'", "user_name ASC");
        //return $this->metas->selecionar(array('usuario', 'venda_integrante_meta as Meta'), "evento = '$cod_evento' AND equipe = '$cod_equipe'");
    }
    
    
    /**
     * Verifica se uma equipe tem pelo menos um evento ativo
     * @param array $evento <p>O evento selecionado no banco de dados ou o código do evento</p>
     * @param bool  <p>true, se tiver algum evento ativo. False caso contrário</p>
     */
    public function EquipeHasEventoAtivo($evento){
        if(!is_array($evento)) $evento = $this->getItem($evento);
        
        $this->LoadModel('venda/evento', 'ev');
        if(!$this->ev->is_ativo($evento['__venda_equipe_eventoativo'])){
            if(isset($evento['__venda_equipe_proximoevento']) && 
               $this->ev->is_ativo($evento['__venda_equipe_proximoevento'])
            ){
                $this->LoadModel('venda/integrante', 'int');
                if(!$this->int->proxEvLiberado()) return false;
            }else return false;
        }
        return true;
    }
    
}
?>